/* =====================================================
   期货分钟级行情表（重新定义）
   表名：FutureMinutesHQ
   说明：一分钟一条，按交易日历分区
   ===================================================== */

DROP TABLE IF EXISTS dbo.FutureMinutesHQ;   -- SQL Server 2016+
GO

/* 1. 文件组与分区函数（按年分区，示例到 2030） */
-- 注释掉文件组和分区相关的语句，简化表创建
-- ALTER DATABASE FuturesDB ADD FILEGROUP FG_FutMin_2025;
-- ALTER DATABASE FuturesDB ADD FILEGROUP FG_FutMin_2026;
-- ALTER DATABASE FuturesDB ADD FILEGROUP FG_FutMin_2027;
-- ALTER DATABASE FuturesDB ADD FILEGROUP FG_FutMin_2028;
-- ALTER DATABASE FuturesDB ADD FILEGROUP FG_FutMin_2029;
-- ALTER DATABASE FuturesDB ADD FILEGROUP FG_FutMin_2030;
-- GO

-- ALTER DATABASE FuturesDB
-- ADD FILE (NAME = N'FutMin_2025', FILENAME = N'D:\SQLData\FutMin_2025.ndf', SIZE = 1GB)
-- TO FILEGROUP FG_FutMin_2025;
-- /* ……为每个 FG 重复一次…… */

-- CREATE PARTITION FUNCTION PF_FutMin_Year(int)
-- AS RANGE RIGHT FOR VALUES
-- (20260000,20270000,20280000,20290000,20300000);

-- CREATE PARTITION SCHEME PS_FutMin_Year
-- AS PARTITION PF_FutMin_Year
-- TO (FG_FutMin_2025,FG_FutMin_2026,FG_FutMin_2027,
--     FG_FutMin_2028,FG_FutMin_2029,FG_FutMin_2030);
-- GO

/* 2. 主表 */
CREATE TABLE dbo.FutureMinutesHQ
(
    ID                    bigint         IDENTITY(1,1) NOT NULL,
    CodeID                int            NOT NULL,
    dt                    int            NOT NULL,        -- yyyyMMdd
    [Time]                int            NOT NULL,        -- HHmm  0930
    MinuteValue           smallint       NOT NULL,        -- 当日第几分钟 0-1439
    hp                    int            NOT NULL,        -- 最高价 (×最小跳动)
    lp                    int            NOT NULL,        -- 最低价 (×最小跳动)
    op                    int            NOT NULL,        -- 开盘价 (×最小跳动)
    cp                    int            NOT NULL,        -- 收盘价 (×最小跳动)
    zcp                   int            NOT NULL,        -- 结算价 (×最小跳动)
    vol                   bigint         NOT NULL,        -- 成交量（手）
    amt                   bigint         NOT NULL,        -- 成交额（元）
    oi                    bigint         NOT NULL,        -- 持仓量（手）
    rtn                   int            NOT NULL,        -- 收益率（十万分之一）
    HQDataSourceType      char(1)        NOT NULL, -- 1=交易所 2=模拟 3=回测
    InsertUTC             datetime2(0)   CONSTRAINT DF_FutMin_InsertUTC DEFAULT (sysutcdatetime()),
    CONSTRAINT PK_FutureMinutesHQ PRIMARY KEY CLUSTERED (CodeID, dt, [Time])
) ON [PRIMARY];
GO

/* 3. 外键 */
-- 注释掉外键约束，因为引用的表名不匹配
ALTER TABLE dbo.FutureMinutesHQ
ADD CONSTRAINT FK_FutMin_CodeID
FOREIGN KEY (CodeID) REFERENCES dbo.CodeTable(CodeID);
GO

/* 4. 索引 */
/* 4.1 按“日期+合约”拉取全市场 K 线 */
CREATE NONCLUSTERED INDEX IX_FutMin_dt_CodeID_Time
ON dbo.FutureMinutesHQ (dt, CodeID, [Time])
INCLUDE (cp, vol, amt);
GO

/* 4.2 按合约拉取连续序列 */
CREATE NONCLUSTERED INDEX IX_FutMin_CodeID_dt_Time
ON dbo.FutureMinutesHQ (CodeID, dt, [Time])
INCLUDE (op, hp, lp, cp, vol, oi);
GO

/* 5. 扩展属性（注释） */
EXEC sys.sp_addextendedproperty
    @name  = N'MS_Description',
    @value = N'期货分钟级行情，一分钟一条，按交易日历分区',
    @level0type = N'SCHEMA', @level0name = dbo,
    @level1type = N'TABLE',  @level1name = FutureMinutesHQ;
GO

/* 示例：价格字段单位说明 */
EXEC sys.sp_addextendedproperty
    @name  = N'MS_Description',
    @value = N'价格字段统一乘以“最小跳动”后的整型存储，例：最小跳动 0.2 元，则 hp=5000 表示 1000.0 元',
    @level0type = N'SCHEMA', @level0name = dbo,
    @level1type = N'TABLE',  @level1name = FutureMinutesHQ;
GO